Skip to main content

typeof null为什么等于object

这是一个历史遗留问题,是一个不能修改的错误。在JavaScript的第一个版本实现中 用32位存储一个值 ,包括一个3位的用于表示类型的标识和实际的值。类型标记存储在低位上,一共有5种:

  • 000:对象
  • 1:整数
  • 010:浮点数
  • 100:字符串
  • 110:布尔

也就是说,最低位如果是1,那么类型标记只有1位长;如果是0,那么类型标记有3位长,为4种类型提供两个额外的位。有两个值是特殊的:

  • undefined (JSVAL_VOID)是整数−230 = 1073741824(整数范围之外的数字)。
  • null (JSVAL_NULL)是机器码空指针。或者:一个对象类型标签加上一个零的引用(0000)。

现在我们很清楚为什么typeof为什么会认为null是一个对象了,它检查了null的类型标记,类型标记说object